What a cert is · Chain of trust · How to get one · Where it lives · Lifecycle · First connection · How auth works · mTLS
Issued and cryptographically signed by a Certificate Authority your OS already trusts. Click each section to expand.
openssl s_client -connect google.com:443 </dev/nullYour OS ships with ~150 pre-installed Root CA certs. Every website's cert traces back to one of them. You never manually trust each site — you trust the root, which vouches for intermediates, which vouch for leaf certs.
certbot automates the ACME protocol. The core insight: the CA never needs to trust you personally — it just proves you control the domain, then signs your public key for that domain.
http://yourdomain/.well-known/acme-challenge/TOKEN_acme-challenge.yourdomain = TOKENcertbot places files in specific directories. The server is configured to read them on startup. Here is exactly where everything goes and what each file is.
| Platform | Where roots are stored | Add custom roots? |
|---|---|---|
| macOS | Keychain Access → System Roots | Yes — drag cert into Keychain → Always Trust |
| Linux | /etc/ssl/certs/ · /usr/share/ca-certificates/ | Yes — copy to /usr/local/share/ca-certificates/ → update-ca-certificates |
| Windows | certmgr.msc → Trusted Root CAs | Yes — certmgr or Group Policy |
| iOS | Settings → General → About → Certificate Trust Settings | Yes — install profile via Settings → VPN and Device Management |
| K8s pods | /etc/ssl/certs/ on node (inherited by pods) | Yes — inject custom CA via ConfigMap mount, or cert-manager CA injector |
The full life of a certificate — from key generation to revocation. If automation is correct, you never manually touch any of this.
| Days left | Action | Severity |
|---|---|---|
| 90 → 31 | Nothing. certbot handles renewal automatically. | OK |
| 30 | Alert fires. Investigate if certbot hasn't renewed. | WARN |
| 7 | Page on-call. Something broken — manual intervention likely needed. | CRITICAL |
| 0 | Site down. Emergency: certbot renew --force-renewal + nginx reload. | INCIDENT |
| Key leaked | Revoke immediately. Re-issue with fresh key. Rotate all secrets. | INCIDENT |
How does a browser trust a server it has never spoken to before? No shared secret, no prior relationship, no manual setup needed. The chain of trust bootstraps through your OS.
A cert proves "this public key belongs to api.example.com". But how does the client verify the server actually holds the matching private key? Via the CertificateVerify message — a digital signature over the handshake transcript.
CertificateVerify signature because they don't have the private key.In regular TLS only the server authenticates. In mTLS both sides do. Used inside Kubernetes so services can't impersonate each other even if the cluster network is compromised.
spiffe://cluster.local/ns/default/sa/user-service| Aspect | TLS | mTLS |
|---|---|---|
| Server auth | ✓ | ✓ |
| Client auth | ✗ anonymous | ✓ cert required |
| Client needs cert | No | Yes |
| App code changes? | No | No — Envoy sidecar handles it |
| Use case | Public web | Service mesh, zero-trust |